package views;

import controllers.EstudiantesControl;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import logicBusiness.ProfesorBL;
import models.Estudiante;

/**
 *
 * @author eagle_eye
 */
public class EstudiantesIFrame extends JInternalFrame {

    private EstudiantesControl estudiantesControl;
    private JPanel pnlContainer;
    private JTabbedPane tabs;
    private JPanel pnlGeneralEstudiantes;
    private JPanel pnlRtaEstudiante;
    private JPanel pnlGeneralCalificaciones;
    private JPanel pnlRtaCalificaciones;
    private JPanel pnlButton;
    private JButton btnCancel;
    private JButton bntAceptar;
    private JTextField tfBuscarEst;
    private JButton btnBuscarEst;

    /**
     * Constructor de la clase
     * @param Jframe f
     */
    public EstudiantesIFrame(JFrame f) {
        super("Estudiantes", true, true, true, true);
        initComponents();
        pnlRtaEstudiante.setVisible(false);
        pnlRtaCalificaciones.setVisible(false);
        this.setResizable(false);
    }

    /**
     * Metodo que contruye el panel principal de estudiantes
     * @return Jpanel
     */
    private JPanel buildEstudiantesPanel() {
        JPanel pnlEstudiantes = new JPanel();
        pnlEstudiantes.setLayout(new GridLayout(1, 0));

        JButton btnInfoEst = new JButton("Consultar datos personales del estudiante");
        JButton btnChDatosPersonalesEst = new JButton("Cambiar datos personales del estudiante");
        JButton btnAsignarEst = new JButton("Asignar estudiante a curso");

        btnInfoEst.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                infoEstPressed();
            }
        });

        btnChDatosPersonalesEst.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                chDatosEstPressed();
            }
        });

        btnAsignarEst.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                asigEstPressed();
            }
        });

        JPanel pnlInfoEst = new JPanel();
        pnlInfoEst.setLayout(new ColumnLayout());
        pnlInfoEst.setBorder(new TitledBorder("Información estudiante"));

        pnlInfoEst.add(btnInfoEst);
        pnlInfoEst.add(btnChDatosPersonalesEst);
        pnlInfoEst.add(btnAsignarEst);

        pnlRtaEstudiante = new JPanel();
        pnlRtaEstudiante.setBorder(new TitledBorder("Consultas Estudiantes"));
        
        JPanel pnlBusqueda = new JPanel();
        pnlBusqueda.setBorder(new TitledBorder("Datos de la busqueda "));
        Label lblBuscarEst = new Label("Documento del estudiante: ");
        tfBuscarEst = new JTextField(15);
        btnBuscarEst = new JButton("Buscar");

        btnBuscarEst.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                buscarEstPressed();
            }
        });

        GroupLayout layout = new GroupLayout(pnlBusqueda);
        layout.setAutoCreateContainerGaps(true);

        layout.setHorizontalGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
                .addComponent(lblBuscarEst).addComponent(tfBuscarEst)
                .addComponent(btnBuscarEst)));
        
        layout.setVerticalGroup(layout.createSequentialGroup().addGroup(layout
                .createParallelGroup(GroupLayout.Alignment.BASELINE)
                .addComponent(lblBuscarEst).addComponent(tfBuscarEst)
                .addComponent(btnBuscarEst)));


        JPanel pnlResultEst = new JPanel();
        GroupLayout layout1 = new GroupLayout(pnlResultEst);
        layout1.setAutoCreateGaps(true);
        layout1.setAutoCreateContainerGaps(true);
        pnlResultEst.setBorder(new TitledBorder("Datos generales Estudiante"));
//        pnlResultEst.

        Label lblnombreEst = new Label("Nombres del estudiante: ");
        Label lblApellidosEst = new Label("Apellidos del estudiante: ");
        Label lblDocEst = new Label("Documento estudiante: ");
        Label lblFechaNacEst = new Label("Fecha de nacimiento: ");
        Label lblInscritoEst = new Label("Inscrito: ");
        Label lblMatriculado = new Label("Matriculado: ");
        Label lblTelEst = new Label("Teléfono: ");
        Label lblFechaIncripEst = new Label("Fecha Inscripción: ");
        JTextField tfnombreEst = new JTextField(15);
        JTextField tfApellidoEst = new JTextField(15);
        JTextField tfDocEst = new JTextField(15);
        JTextField tfFechaNacEst = new JTextField(15);
        JTextField tfInscritoEst = new JTextField(15);
        JTextField tfMatriculadoEst = new JTextField(15);
        JTextField tfTelEst = new JTextField(15);
        JTextField tfFechaIncripEst = new JTextField(15);

        layout1.setHorizontalGroup(layout1.createSequentialGroup()
                .addGroup(layout1.createParallelGroup()
                .addComponent(lblnombreEst).addComponent(lblApellidosEst)
                ));

        layout1.setVerticalGroup(layout1.createSequentialGroup()
                        .addGroup(layout1.createParallelGroup()
                        .addComponent(lblnombreEst)
                        .addComponent(tfnombreEst)
                       ));



        pnlRtaEstudiante.add(pnlBusqueda);
        pnlRtaEstudiante.add(pnlResultEst);

        pnlEstudiantes.add(pnlInfoEst);
        pnlEstudiantes.add(pnlRtaEstudiante);

        return pnlEstudiantes;
    }

    /**
     * Metodo que contruye el panel principal de calificaciones
     * @return Jpanel
     */
    private JPanel buildCalificacionesPanel() {

        JPanel calificaciones = new JPanel();
        calificaciones.setLayout(new GridLayout(1, 0));

        JPanel pnlGestionCalif = new JPanel();
        pnlGestionCalif.setLayout(new ColumnLayout());
        pnlGestionCalif.setBorder(new TitledBorder("Información Calificaciones"));

        JButton btnInfoCalificaciones = new JButton("Consultar calficaciones");
        JButton btnEditarCalif = new JButton("Editar calificacines");
        JButton btnRegCalif = new JButton("Registrar calificaciones");

        pnlGestionCalif.add(btnInfoCalificaciones);
        pnlGestionCalif.add(btnEditarCalif);
        pnlGestionCalif.add(btnRegCalif);

        pnlRtaCalificaciones = new JPanel();
        pnlRtaCalificaciones.setBorder(new TitledBorder("Resultados Consultas"));
        pnlRtaCalificaciones.setLayout(new ColumnLayout());

        calificaciones.add(pnlGestionCalif);
        calificaciones.add(pnlRtaCalificaciones);

        return calificaciones;
    }

    protected void centerDialog() {
        Dimension screenSize = this.getToolkit().getScreenSize();
        Dimension size = this.getSize();
        screenSize.height = screenSize.height / 2;
        screenSize.width = screenSize.width / 2;
        size.height = size.height / 2;
        size.width = size.width / 2;
        int y = screenSize.height - size.height;
        int x = screenSize.width - size.width;
        this.setLocation(x, y);
    }

    /**
     * Metodo que inicializa los componentes principales
     */
    private void initComponents() {

        setBounds(100, 10, 200, 200);
        pnlContainer = new JPanel();
        pnlContainer.setBorder(new LineBorder(Color.gray));
        pnlContainer.setLayout(new BorderLayout());
        pnlGeneralEstudiantes = buildEstudiantesPanel();
        pnlGeneralCalificaciones = buildCalificacionesPanel();
        tabs = new JTabbedPane();
        tabs.addTab("Administrar Estudiantes", null, pnlGeneralEstudiantes);
        tabs.addTab("Administrar Calificaciones", null, pnlGeneralCalificaciones);

        pnlButton = new JPanel();
        pnlButton.setLayout(new FlowLayout(FlowLayout.RIGHT));
        btnCancel = new JButton("Cancelar");
        btnCancel.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                CancelPressed();
            }
        });
        pnlButton.add(btnCancel);

        bntAceptar = new JButton("Aceptar");
        bntAceptar.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                OKPressed();
            }
        });
        pnlButton.add(bntAceptar);
        getRootPane().setDefaultButton(bntAceptar);

        pnlContainer.add(tabs, BorderLayout.CENTER);
        pnlContainer.add(pnlButton, BorderLayout.SOUTH);

        getContentPane().add(pnlContainer);
        pack();
        centerDialog();
        UIManager.addPropertyChangeListener(new UISwitchListener(pnlContainer));

    }

    /**
     * Metodos que manejan los eventos del panel de estudiantes
     */
    private void infoEstPressed() {
        pnlRtaEstudiante.setVisible(true);
    }

    /**
     * Acion Listener del boton Buscar Estudiantes
     */
    private void buscarEstPressed() {
//    pnlRtaEstudiante.removeAll();
//    pnlRtaEstudiante.repaint();
        String docEst = tfBuscarEst.getText();
        if (docEst.isEmpty()) {
            JOptionPane.showMessageDialog(this, "Debe ingresar el documento.");
        } else {
            boolean isCorrect = false;
            estudiantesControl = new EstudiantesControl();
            isCorrect = estudiantesControl.validarBusquedaEst(docEst);
            if (isCorrect) {
                ProfesorBL pBL = new ProfesorBL();
                Estudiante estudianteActual = pBL.buscarEst(docEst);
                if (estudianteActual == null) {
                    JOptionPane.showMessageDialog(this, "Estudiante no encontrado");
                } else {

                    /*la consulta*/

                    System.out.println("Estudiante sí" + docEst);
                }
            } else {
                JOptionPane.showMessageDialog(this, "El formato del documento no es correcto.");
            }
        }
    }

    private void chDatosEstPressed() {
    }

    public void asigEstPressed() {
    }

    /**
     * Metodos que maniplulan los actionListeners de los botones Cancelar
     * y aceptar del Frame Principal.
     */
    private void CancelPressed() {
        this.setVisible(false);
    }

    private void OKPressed() {
        this.setVisible(false);
    }
}

class columnLayout implements LayoutManager {

    int xInset = 80;
    int yInset = 80;
    int yGap = 32;

    public void addLayoutComponent(String s, Component c) {
    }

    public void layoutContainer(Container c) {
        Insets insets = c.getInsets();
        int height = yInset + insets.top;

        Component[] children = c.getComponents();
        Dimension compSize = null;
        for (int i = 0; i < children.length; i++) {
            compSize = children[i].getPreferredSize();
            children[i].setSize(compSize.width, compSize.height);
            children[i].setLocation(xInset + insets.left, height);
            height += compSize.height + yGap;
        }

    }

    public Dimension minimumLayoutSize(Container c) {
        Insets insets = c.getInsets();
        int height = yInset + insets.top;
        int width = 0 + insets.left + insets.right;

        Component[] children = c.getComponents();
        Dimension compSize = null;
        for (int i = 0; i < children.length; i++) {
            compSize = children[i].getPreferredSize();
            height += compSize.height + yGap;
            width = Math.max(width, compSize.width + insets.left + insets.right + xInset * 2);
        }
        height += insets.bottom;
        return new Dimension(width, height);
    }

    public Dimension preferredLayoutSize(Container c) {
        return minimumLayoutSize(c);
    }

    public void removeLayoutComponent(Component c) {
    }
}
